// aixos二次封装的文件 api   utils  文件名为ajax或者request  
import axios from "axios";
import qs from 'qs';

// 生产环境 production  开发环境 devlopment  测试环境 text
console.log(process.env.NODE_ENV);
switch(process.env.NODE_ENV){
    case "production":
        axios.defaults.baseURL = "http://129.168.110.129:8000";
        break;
    case "text":
        axios.defaults.baseURL = "http://129.168.110.129:8000";
        break;
    //开发环境
    default:
        axios.defaults.baseURL = 'http://localhost:8000'
}

// 创建axios的实例对象
let instance = axios.create({
    // baseURL:'http://localhost:8000',//基础路径
    timeout:50000//超时时间
});
// 拦截器
// 请求拦截器
instance.interceptors.request.use((config)=>{
    console.log(config);
    return config;
},err=>{
    console.log(err);
    return err
})
// 响应拦截器
instance.interceptors.response.use(res=>{
    console.log(res);
    return res;
},err=>{
    console.log(err);
    return err;
})
// 目的 咱们目的就是将各种请求封装称为一个函数   data {}  
// get data query  将data  key=value&key=valu  将其拼接到url url?key=value&key=valu
// post data {} 作为请求体存在
// headerType告诉函数到底是什么数据类型
// let request = function(method,url,arg,headerType){
    // es6当中的对象的解构赋值
let request = function({method,url,arg,headerType}){
    let data = {};
    // 如果是get请求如何处理
    if(method.toLowerCase() == 'get'){
        // url 参数处理
        // 请求头
        if(headerType == 'form'){
            instance.defaults['Content-Type'] = "application/x-www-form-urlencoded;charset=utf-8";
        }
        if(arg){
            arg = qs.stringify(arg);
            // url = url + '?' + arg;
            url += "?" +arg;
        }
    }
    // 如果是post请求如何处理
    if(method.toLowerCase() == 'post'){
        // 请求头  请求体的格式
        if(headerType == 'form'){
            instance.defaults['Content-Type'] = "application/x-www-form-urlencoded;charset=utf-8";
            // 对于post请求请求体  提交的数据需要进行序列化
            data = qs.stringify(arg);
        }else {
            instance.defaults["Content-Type"] = "application/json;charset=utf-8";
            data = arg;
        }
    }
    return new Promise((resolve,reject)=>{
        instance({
            method,//请求方式  get post
            url,//基础路径后面的  url/params 对于 url?key=value&key=value
            // params,//query参数
            data//请求体当中的参数
        }).then(res=>{
            console.log('成功的值'+res);
            resolve(res);
        }).catch(err=>{
            console.log(err);
            reject(err);
        })
    })
}
export default request;